﻿namespace WriteForFighting.FightingAPI
{
    public sealed class Rudder
    {
        /// <summary>
        /// MoveSpeedに1.0を指定した時の機体の移動速度
        /// </summary>
        public static readonly double MaxMoveSpeed = 1.5d;
        /// <summary>
        /// 設定できる最速の機体の旋回速度
        /// </summary>
        public static readonly double MaxAngleMoveSpeed = 0.05235d;

        private double moveSpeed;
        /// <summary>
        /// 機体を前進・後進させる速度(-1.0～1.0)を設定します。0.0を設定すると静止します。
        /// </summary>
        public double MoveSpeed
        {
            get
            {
                return moveSpeed;
            }
            set
            {
                if (value < -1.0)
                {
                    moveSpeed = -1.0;
                    return;
                }
                if (1.0d < value)
                {
                    moveSpeed = 1.0d;
                    return;
                }

                moveSpeed = value;
            }
        }

        private double angleMoveSpeed;
        /// <summary>
        /// 機体を旋回させる速度(-MaxAngleMoveSpeed～MaxAngleMoveSpeed)を設定します。
        /// </summary>
        public double AngleMoveSpeed
        {
            get
            {
                return angleMoveSpeed;
            }
            set
            {
                if (value < -MaxAngleMoveSpeed)
                {
                    angleMoveSpeed = -MaxAngleMoveSpeed;
                    return;
                }
                if (MaxAngleMoveSpeed < value)
                {
                    angleMoveSpeed = MaxAngleMoveSpeed;
                    return;
                }

                angleMoveSpeed = value;
            }
        }

        /// <summary>
        /// 現在のフレームでLanchABullet()が呼ばれたかを取得します。
        /// </summary>
        public bool IsRequestedToLanchABullet { get; private set; }


        public Rudder()
        {
            Clear();
        }

        /// <summary>
        /// 現在のフレームで弾を発射します。
        /// </summary>
        public void LanchABullet()
        {
            IsRequestedToLanchABullet = true;
        }

        /// <summary>
        /// 現在のフレームで設定した操作を取り消します。
        /// </summary>
        public void Clear()
        {
            MoveSpeed = 0;
            AngleMoveSpeed = 0;
            IsRequestedToLanchABullet = false;
        }
    }
}
